package br.com.afi.pattern.converter;

import java.io.Serializable;
import java.util.List;

/**
 * Essa interface prove métodos de conversão entre dois tipos de objetos.
 * 
 * @author André de Fontana Ignacio
 * @param <E> Tipo do Objeto 1
 * @param <V> Tipo do Objeto 2
 */
public interface Converter<E extends Serializable, V extends Serializable>
{
	/**
	 * Converte um Objeto do Tipo 2 em um Objeto do Tipo 1.
	 * 
	 * @param v Tipo 2
	 * @return Objeto do Tipo 1
	 */
	E convertForward( V v );

	/**
	 * Converte um Objeto do Tipo 1 em um Objeto do Tipo 2.
	 * 
	 * @param e Tipo 1
	 * @return Objeto do Tipo 2
	 */
	V convertReverse( E e );

	/**
	 * Converte uma lista de Objeto do Tipo 2 em lista do Tipo 1
	 * 
	 * @param listV Lista de Objetos do tipo 2
	 * @return Lista de objetos do tipo 1
	 */
	List<E> convertListForward( List<V> listV );

	/**
	 * Converte uma lista de Objeto do Tipo 1 em lista do Tipo 2
	 * 
	 * @param listE Lista de Objetos do tipo 1
	 * @return Lista de objetos do tipo 2
	 */
	List<V> convertListReverse( List<E> listE );

}
